#include "VentanaEscenarios.h"
#include "VentanaEditarEsc.h"
#include "Cuadrado.h"
#include "Posicion.h"
#include "Rectangulo.h"
#include "ControladorVentana.h"
#include "ControladorVentanaEditEscenario.h"

VentanaEscenarios::VentanaEscenarios()
{
}
VentanaEscenarios::VentanaEscenarios(std::string nombre)
{
	this->alto = 435;
	this->ancho = 435;
	this->nombre = nombre;
	this->colorFondoVentana = new Color(220,220,220);

	Posicion* posBtBorrar = new Posicion(220,245);
	Rectangulo* btBorrar = new Rectangulo("btBorrar",100,35,posBtBorrar);
	this->addFigura(btBorrar);

	Posicion* posBtAbrir = new Posicion(325,245);
	Rectangulo* btAbrir = new Rectangulo("btAbrir",100,35,posBtAbrir);
	this->addFigura(btAbrir);

	Posicion* posBtCrear = new Posicion(325,305);
	Rectangulo* btCrear = new Rectangulo("btCrear",100,35,posBtCrear);
	this->addFigura(btCrear);

	Posicion* posBtSalir = new Posicion(325,365);
	Rectangulo* btSalir = new Rectangulo("btSalir",100,35,posBtSalir);
	this->addFigura(btSalir);

}

VentanaEscenarios::~VentanaEscenarios(void)
{
}

int VentanaEscenarios::graficar(){
	int done = 0;
	// Iniciar SDL
	if (SDL_Init(SDL_INIT_VIDEO) < 0) {
		printf("No se pudo iniciar SDL: %s\n",SDL_GetError());
		return -1;
	}
	atexit(SDL_Quit);
	// Comprobamos que sea compatible el modo de video
	if(SDL_VideoModeOK(this->getAncho(), this->getAlto(), 32, SDL_SWSURFACE|SDL_DOUBLEBUF) == 0) {
		std::cout<< "Modo no soportado: " << SDL_GetError() << std::endl;
		exit(1);
	}
	//seteamos el titulo a la barra
	SDL_WM_SetCaption(this->nombre.c_str(),NULL);

	this->screen = SDL_SetVideoMode(this->getAncho(),this->getAlto(),32, SDL_SWSURFACE | SDL_DOUBLEBUF );
	if(!screen){
		std::cout<<"No se pudo iniciar la pantalla: %s"<<SDL_GetError();
		return -1;
	}
	this->pintarPantalla();
	std::list<Figura*>::iterator iter;
	iter = this->iteratorListaFiguras();
	
	Color* colorBtnApretado = new Color(0,0,200);
	Color* colorBtnNoApretado = new Color(200,200,200);

	bool terminar = false;
	SDL_Event evento;
	int i = 1;
	Figura *figura;
	while(i<=this->sizeListaFiguras()){
		figura = *iter;
			figura->dibujar(this->screen);
		iter++;
		i++;
	}
	//loop
	while(terminar == false) {
	SDL_Flip(this->getScreen());//encargado de que se repinte		
		// Control de Eventos
	while (SDL_PollEvent(&evento)) {

	int x = 0, y = 0;
    //si se mueve el mouse
    if( evento.type == SDL_MOUSEMOTION )
    {
        x = evento.motion.x;
        y = evento.motion.y;
		i=1;
		iter = this->iteratorListaFiguras();
		while(i<=this->sizeListaFiguras()){
		figura = *iter;
			if( figura->pertenecePixel(x,y))
			{ 
			figura->setColorFigura(colorBtnApretado);
			figura->dibujar(this->screen);
			}
			else
			{
				figura->setColorFigura(colorBtnNoApretado);
				figura->dibujar(this->screen);
			}
		iter++;
		i++;
		}  
    }//if evento movimiento de mouse
	 if( evento.type == SDL_MOUSEBUTTONDOWN )
    {
        //If the left mouse button was pressed
        if( evento.button.button == SDL_BUTTON_LEFT )
        {
            //Get the mouse offsets
            x = evento.button.x;
            y = evento.button.y;
        
           i=1;
		iter = this->iteratorListaFiguras();
		while(i<=this->sizeListaFiguras()){
		figura = *iter;
			if( figura->pertenecePixel(x,y))
			{ 
				if (figura->getId().compare("btCrear") == 0){
					//ADAPTACION 
				
					Ventana *ventEditarEsc = new VentanaEditarEsc("CRAZY TANKS :: Desierto");
					ControladorVentana *controladorVentEditEsc = new ControladorVentanaEditEscenario((VentanaEditarEsc*)ventEditarEsc);
					controladorVentEditEsc->crearVentana();
					controladorVentEditEsc->controlarEventos();

					SDL_FreeSurface (ventEditarEsc->getScreen());
					delete ventEditarEsc;
					delete controladorVentEditEsc;
					terminar  = true;			
					
					/*
					Ventana* ventEditarEsc = new VentanaEditarEsc("Desierto");
					ventEditarEsc->graficar();
					SDL_FreeSurface(ventEditarEsc->getScreen());
					delete ventEditarEsc;
					*/
				}
				std::cout<< figura->getId().c_str() <<std::endl;
			}
			
		iter++;
		i++;
		}  
        }
    }
	  
			if(evento.type == SDL_KEYDOWN) {
				if(evento.key.keysym.sym == SDLK_ESCAPE)
					terminar = true;
			}
			if(evento.type == SDL_QUIT){
				terminar = true;
			}
		}

	}

	return 0;
}
